home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2xqx-wrapper < prev    next >
Text File  |  2009-10-19  |  16KB  |  650 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2xqx-wrapper.in,v 1.29 2009/05/11 17:35:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # HP LaserJet M1005    - Same as 2200 DL, plus needs -P
  27. #
  28.  
  29. PROGNAME="$0"
  30. BASENAME=`basename $PROGNAME`
  31. PREFIX=/usr
  32. SHARE=$PREFIX/share/foo2xqx
  33. PATH=$PATH:/sw/bin:/opt/local/bin
  34.  
  35. #
  36. #    Log the command line, for debugging and problem reports
  37. #
  38. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  39.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  40. fi
  41.  
  42. usage() {
  43.     cat <<EOF
  44. Usage:
  45.     $BASENAME [options] [ps-file]
  46.  
  47.     Foomatic printer wrapper for the foo2xqx printer driver.
  48.     This script reads a Postscript ps-file or standard input
  49.     and converts it to Zenographics ZjStream printer format.
  50.  
  51. Normal Options:
  52. -c                Print in color (else monochrome)
  53. -d duplex         Duplex code to send to printer [$DUPLEX]
  54.                     1=off, 2=longedge, 3=shortedge
  55. -m media          Media code to send to printer [$MEDIA]
  56.                     1=standard, 2=transparency, 3=glossy, 257=envelope,
  57.                     259=letterhead, 261=thickstock, 262=postcard, 263=labels
  58. -p paper          Paper code [$PAPER]
  59.                     1=letter, 5=legal, 7=executive, 9=A4, 11=A5, 13=B5
  60.                     20=env#10, 27=envDL 28=envC5 34=envB5 37=envMonarch
  61. -n copies         Number of copies [$COPIES]
  62. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  63. -s source         Source code to send to printer [$SOURCE]
  64.                     1=upper, 2=lower, 4=manual, 7=auto
  65.             Code numbers may vary with printer model.
  66. -t                Draft mode.  Every other pixel is white.
  67. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  68.                   Print with N-up (requires psutils)
  69. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  70.  
  71. Printer Tweaking Options:
  72. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  73. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  74. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  75.                   0=no, 1=Y, 2=X, 3=XY
  76. -P                Do not output START_PLANE codes.  May be needed by some
  77.                   monochrome-only printers.
  78. -X padlen         Add extra zero padding to the end of BID segments [16]
  79.  
  80. Color Tweaking Options:
  81. -g gsopts         Additional options to pass to Ghostscript, such as
  82.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  83. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  84.                   adjust colors using the setcolorrendering PS operator.
  85.                   $SHARE/icm/ will be searched for profile.icm.
  86. -I intent         Select profile intent from ICM file [$INTENT]
  87.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  88. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  89.                   color correction using the setcolortransfer PS operator.
  90.  
  91. Debugging Options:
  92. -S plane          Output just a single color plane from a color print [all]
  93.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  94. -D lvl            Set Debug level [$DEBUG]
  95. -V                $VERSION
  96. EOF
  97.  
  98.     exit 1
  99. }
  100.  
  101. #
  102. #       Report an error and exit
  103. #
  104. error() {
  105.     echo "$BASENAME: $1" >&2
  106.     exit 1
  107. }
  108.  
  109. dbgcmd() {
  110.     if [ $DEBUG -ge 1 ]; then
  111.         echo "$@" >&2
  112.     fi
  113.     "$@"
  114. }
  115.  
  116. #
  117. #    N-up-ify the job.  Requires psnup from psutils package
  118. #
  119. nup() {
  120.     case "$NUP" in
  121.     [2368]|1[0458])
  122.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  123.     ;;
  124.     [49]|1[26])
  125.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  126.     ;;
  127.     *)
  128.     error "Illegal call to nup()."
  129.     ;;
  130.     esac
  131. }
  132.  
  133. #
  134. #       Process the options
  135. #
  136.  
  137. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  138. # fallback to whatever the Linux distro has installed (usually 7.07)
  139. #
  140. # N.B. := operator used here, when :- would be better, because "ash"
  141. # doesn't have :-
  142. if gs.foo -v >/dev/null 2>&1; then
  143.         GSBIN=${GSBIN:-gs.foo}
  144. else
  145.         GSBIN=${GSBIN:-gs}
  146. fi
  147.  
  148. CMDLINE="$*"
  149. DEBUG=0
  150. DUPLEX=1
  151. COLOR=
  152. COLORMODE=0
  153. # What mode to use if the user wants us to pick the "best" mode
  154. case `$GSBIN --version` in
  155. 7*)    DEFAULTCOLORMODE=10
  156.     DEFAULTCOLORMODE=2
  157.     ;;
  158. *)    DEFAULTCOLORMODE=2
  159.     ;;
  160. esac
  161. QUALITY=wts
  162. MEDIA=1
  163. COPIES=1
  164. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  165. test "$PAPER" || PAPER=1
  166. RES=1200x600
  167. SOURCE=7
  168. NUP=
  169. CLIP_UL=
  170. CLIP_LR=
  171. CLIP_LOG=
  172. BC=
  173. AIB=
  174. NOPLANES=
  175. COLOR2MONO=
  176. GAMMAFILE=
  177. INTENT=0
  178. GSOPTS=
  179. EXTRAPAD=
  180. SAVETONER=
  181. NUP_ORIENT=
  182. GSDEV=-sDEVICE=pbmraw
  183. # What mode to use if the user wants us to pick the "best" mode
  184. case `$GSBIN --version` in
  185. 8.1*)
  186.     QUALITY=1
  187.     ;;
  188. esac
  189. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tABS:D:G:I:PX:Vh?" opt
  190. do
  191.     case $opt in
  192.     b)    GSBIN="$OPTARG";;
  193.     c)    COLOR=-c;;
  194.     d)    DUPLEX="$OPTARG";;
  195.     g)    GSOPTS="$GSOPTS $OPTARG";;
  196.     m)    MEDIA="$OPTARG";;
  197.     n)    COPIES="$OPTARG";;
  198.     p)    PAPER="$OPTARG";;
  199.     q)    QUALITY="$OPTARG";;
  200.     r)    RES="$OPTARG";;
  201.     s)    SOURCE="$OPTARG";;
  202.     t)    SAVETONER="-t";;
  203.     l)    CLIP_LR="-l $OPTARG";;
  204.     u)    CLIP_UL="-u $OPTARG";;
  205.     L)    CLIP_LOG="-L $OPTARG";;
  206.     A)    AIB=-A;;
  207.     B)    BC=-B;;
  208.     C)    COLORMODE="$OPTARG";;
  209.     S)    COLOR2MONO="-S$OPTARG";;
  210.     D)    DEBUG="$OPTARG";;
  211.     G)    GAMMAFILE="$OPTARG";;
  212.     I)    INTENT="$OPTARG";;
  213.     P)    NOPLANES=-P;;
  214.     X)    EXTRAPAD="-X $OPTARG";;
  215.     [234689])    NUP="$opt";;
  216.     [57])    error "Can't find acceptable layout for $opt-up";;
  217.     1)    case "$OPTARG" in
  218.         [024568])    NUP="1$OPTARG";;
  219.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  220.         esac
  221.         ;;
  222.     o)    case "$OPTARG" in
  223.         l*)    NUP_ORIENT=-l;;
  224.         s*)    NUP_ORIENT=-r;;
  225.         p*|*)    NUP_ORIENT=;;
  226.         esac;;
  227.     V)    echo "$VERSION"; foo2xqx -V; foo2zjs-pstops -V; exit 0;;
  228.     h|\?)
  229.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  230.             echo "Illegal command:"
  231.             echo "    $0 $CMDLINE"
  232.             echo
  233.         fi
  234.         usage;;
  235.     esac
  236. done
  237. shift `expr $OPTIND - 1`
  238.  
  239. #
  240. # If there is an argument left, take it as the file to print.
  241. # Else, the input comes from stdin.
  242. #
  243. if [ $# -ge 1 ]; then
  244.     if [ "$LPJOB" = "" ]; then
  245.     : # LPJOB="$1"
  246.     fi
  247.     exec < $1
  248. fi
  249.  
  250. #
  251. case "$QUALITY" in
  252. 0)
  253.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  254.     ;;
  255. 1)
  256.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  257.     ;;
  258. 2)
  259.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  260.     ;;
  261. wts)
  262.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  263.     ;;
  264. esac
  265.  
  266. #
  267. #    Validate media code
  268. #
  269. case "$MEDIA" in
  270. 1|standard)    MEDIA=1;;
  271. 2|transparency)    MEDIA=2;;
  272. 3|glossy)    MEDIA=3;;
  273. 257|envelope)    MEDIA=257;;
  274. 259|letterhead)    MEDIA=259;;
  275. 261|thickstock)    MEDIA=261;;
  276. 262|postcard)    MEDIA=262;;
  277. 263|labels)    MEDIA=263;;
  278. [0-9]*)        ;;
  279. *)        error "Unknown media code $MEDIA";;
  280. esac
  281.  
  282. #
  283. #    Validate source (InputSlot) code
  284. #
  285. case "$SOURCE" in
  286. 1|upper)    SOURCE=1;;
  287. 4|manual)    SOURCE=4;;
  288. 7|auto)        SOURCE=7;;
  289. [0-9]*)        ;;
  290. *)        error "Unknown source code $SOURCE";;
  291. esac
  292.  
  293. #
  294. #    Validate Duplex code
  295. #
  296. case "$DUPLEX" in
  297. 1|off|none)    DUPLEX=1;;
  298. 2|long*)    DUPLEX=2;;
  299. 3|short*)    DUPLEX=3;;
  300. [0-9]*)        ;;
  301. *)        error "Unknown duplex code $DUPLEX";;
  302. esac
  303.  
  304. #
  305. #    Validate Resolution
  306. #
  307. case "$RES" in
  308. 600x600)    ;;
  309. 1200x600)    ;;
  310. *)        error "Illegal resolution $RES";;
  311. esac
  312.  
  313. #
  314. #    Figure out the paper dimensions in pixels/inch, and set the
  315. #    default clipping region.  Unfortunately, this is a trouble
  316. #    area for ZjStream printers.  Various versions of ZjS print
  317. #    engines react differently when asked to print into their
  318. #    unprintable regions.
  319. #
  320. #    The Minolta 2200 DL is sensitive to its unprintable regions,
  321. #    and will pixel skew if you try to print there.
  322. #
  323. #    The HP1000 will print blank pages when asked to print into its
  324. #    unprintable region.
  325. #
  326. #    The Minolta 2300 DL doesn't care if print into the unprintable
  327. #    region.  It will do the clipping itself.  This is as it should be.
  328. #    But it won't hurt it if we do the clipping here.
  329. #
  330. set_clipping() {
  331.     ulx=$1; uly=$2
  332.     lrx=$3; lry=$4
  333.  
  334.     # Set clipping region if it isn't already set
  335.     if [ "$CLIP_UL" = "" ]; then
  336.     case "$RES" in
  337.     600x600)    ulx=`expr $ulx / 2`;;
  338.     2400x600)    ulx=`expr $ulx \* 2`;;
  339.     esac
  340.     CLIP_UL="-u ${ulx}x${uly}"
  341.     fi
  342.     if [ "$CLIP_LR" = "" ]; then
  343.     case "$RES" in
  344.     600x600)    lrx=`expr $lrx / 2`;;
  345.     2400x600)    lrx=`expr $lrx \* 2`;;
  346.     esac
  347.     CLIP_LR="-l ${lrx}x${lry}"
  348.     fi
  349. }
  350.  
  351. case "$PAPER" in
  352. Custom*)
  353.         case "$PAPER" in
  354.         Custom\.[0-9]*\x[0-9]*)
  355.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  356.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  357.             ;;
  358.         *)
  359.         #%%BeginFeature: *CustomPageSize True
  360.         #216
  361.         #360
  362.         #0
  363.         #0
  364.         #0
  365.         #pop pop pop pop pop
  366.  
  367.         #%%BeginFeature: *CustomPageSize True
  368.         #792.000000 612.000000 1 0.000000 0.000000
  369.         #pop pop pop pop pop
  370.  
  371.         if [ $DEBUG = 0 ]; then
  372.             TMPFILE=/tmp/cus$$
  373.         else
  374.             TMPFILE=/tmp/custom.ps
  375.         fi
  376.         cat >$TMPFILE
  377.         exec <$TMPFILE
  378.  
  379.         tmp=`head -n 10000 $TMPFILE \
  380.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  381.             | tr '\n' ' '`
  382.         case "$tmp" in
  383.         [0-9]*\ [0-9]*)
  384.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  385.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  386.             ;;
  387.         *)
  388.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  389.             error "Custom page size [XY]DIM != 1-99999"
  390.             ;;
  391.         esac
  392.         ;;
  393.         esac
  394.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  395.         YDIM=`dc -e "$YDIM 600* 72/p"`
  396.         PAPER=359;        paper=letter;
  397.                 set_clipping 2 84     2 84
  398.         ;;
  399. 1|letter)    PAPER=1;    paper=letter;    XDIM="10200"; YDIM="6600"
  400.         set_clipping 177 84    177 84
  401.         ;;
  402. 5|legal)    PAPER=5;    paper=legal;     XDIM="10200"; YDIM="8400"
  403.         set_clipping 177 96    177 96
  404.         ;;
  405. 7|executive)    PAPER=7;    paper=executive; XDIM="8700";  YDIM="6300"
  406.         set_clipping 192 96    192 96
  407.         ;;
  408. 9|a4|A4)    PAPER=9;    paper=a4;        XDIM="9920";  YDIM="7016"
  409.         set_clipping 176 84    176 84
  410.         ;;
  411. 11|a5|A5)    PAPER=11;    paper=a5;        XDIM="6992";  YDIM="4960"
  412.         set_clipping 192 96    192 96
  413.         ;;
  414. 13|b5|B5)    PAPER=13;    paper=b5;        XDIM="8598";  YDIM="6070"
  415.         set_clipping 192 96    192 96
  416.         ;;
  417. 20|"env#10")    PAPER=20;    paper=env10;     XDIM="4950";  YDIM="5700"
  418.         set_clipping 171 78    171 78
  419.         ;;
  420. 27|envDL)    PAPER=27;    paper=envDL;     XDIM="5200";  YDIM="5200"
  421.         set_clipping 176 84    176 84
  422.         ;;
  423. 28|envC5)    PAPER=28;    paper=envC5;     XDIM="7650";  YDIM="5408"
  424.         set_clipping 170 80    169 80
  425.         ;;
  426. 34|envB5)    PAPER=34;    paper=envB5;     XDIM="8316";  YDIM="5892"
  427.         set_clipping 174 74    174 74
  428.         ;;
  429. 37|envMonarch)    PAPER=37;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  430.         set_clipping 174 78    173 78
  431.         ;;
  432. *)        error "Unimplemented paper code $PAPER";;
  433. esac
  434. PAPERSIZE="-sPAPERSIZE=$paper";
  435.  
  436. case "$RES" in
  437. 600x600)    XDIM=`expr $XDIM / 2`;;
  438. 1200x600)    ;;
  439. 2400x600)    XDIM=`expr $XDIM \* 2`;;
  440. esac
  441. DIM="${XDIM}x${YDIM}"
  442.  
  443. #
  444. # Filter thru psnup if N-up printing has been requested
  445. #
  446. case $NUP in
  447. [234689]|1[024568])    PREFILTER="nup";;
  448. *)            PREFILTER=cat;;
  449. esac
  450. if [ "$DEBUG" -ge 9 ]; then
  451.     PREFILTER="tee /tmp/$BASENAME.ps"
  452. fi
  453.  
  454. #
  455. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  456. #    then convert the ICC color profile to a Postscript CRD,
  457. #    then prepend it to the users job.  Select the intent
  458. #    using the -I option.
  459. #
  460.  
  461. create_crd() {
  462.     #
  463.     # Create a Postscript CRD
  464.     #
  465.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  466.     if [ -x $ICC2PS ]; then
  467.     if [ -x /usr/bin/logger ]; then
  468.         logger -t "$BASENAME" -p lpr.info -- \
  469.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  470.     fi
  471.     $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  472.         || error "Problem converting .ICM file to Postscript"
  473.  
  474.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  475.     cat > $ICCTMP.usecie.ps <<-EOF
  476.         %!PS-Adobe-3.0
  477.         <</UseCIEColor true>>setpagedevice
  478.     EOF
  479.     cat > $ICCTMP.selcrd.ps <<-EOF
  480.         /Current /ColorRendering findresource setcolorrendering
  481.     EOF
  482.     GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps"
  483.     else
  484.     GAMMFILE=
  485.     fi
  486. }
  487.  
  488. if [ $DEBUG -gt 0 ]; then
  489.     ICCTMP=/tmp/icc
  490. else
  491.     ICCTMP=/tmp/icc$$
  492. fi
  493.  
  494. if [ "" = "$COLOR" ]; then
  495.     COLORMODE=
  496.     GAMMAFILE=
  497. else
  498.     case "$COLORMODE" in
  499.     0)    COLORMODE=$DEFAULTCOLORMODE;;
  500.     esac
  501. fi
  502.  
  503. CRDBASE="$PREFIX/share/foo2zjs/crd"
  504. case "$RES" in
  505.     600x600)    SCREEN=screen1200.ps;;
  506.     1200x600)    SCREEN=screen1200.ps;;
  507.     2400x600)    SCREEN=screen2400.ps;;
  508. esac
  509.  
  510. PSTOPS_OPTS="-n"
  511.  
  512. case "$COLORMODE" in
  513. "")
  514.     # Monochrome
  515.     ;;
  516. 10|icm)
  517.     # Use old ICM method
  518.     AIB=-A
  519.     BC=-B
  520.     case "$GAMMAFILE" in
  521.     *.icm|*.ICM|*.icc|*.ICC)
  522.     #
  523.     # Its really an .ICM file, not a gamma file.
  524.     #
  525.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  526.     #
  527.     if [ -r "$GAMMAFILE" ]; then
  528.         create_crd
  529.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  530.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  531.         create_crd
  532.     else
  533.         GAMMAFILE=
  534.     fi
  535.     ;;
  536.     none)
  537.     GAMMAFILE=
  538.     ;;
  539.     esac
  540.     ;;
  541. 1|photo)
  542.     # Photo
  543.     GAMMAFILE="$CRDBASE/prolog.ps"
  544.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr125,75-per.crd"
  545.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  546.     ;;
  547. 2|graphics)
  548.     # Photo and Text
  549.     GAMMAFILE="$CRDBASE/prolog.ps"
  550.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,75-per.crd"
  551.     GAMMAFILE="$GAMMAFILE $CRDBASE/kh.crd"
  552.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  553.     ;;
  554. 3|text)
  555.     # Graphic and Text
  556.     GAMMAFILE="$CRDBASE/prolog.ps"
  557.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,50-per.crd"
  558.     GAMMAFILE="$GAMMAFILE $CRDBASE/kx.crd"
  559.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  560.     ;;
  561. 4|tonersave)
  562.     # Reduced toner
  563.     GAMMAFILE="$CRDBASE/prolog.ps"
  564.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,0-per.crd"
  565.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  566.     ;;
  567. *.crd)
  568.     GAMMAFILE="$CRDBASE/prolog.ps"
  569.     if [ -f $COLORMODE ]; then
  570.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  571.     elif [ -f $CRDBASE/$COLORMODE ]; then
  572.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  573.     else
  574.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  575.     fi
  576.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  577.     ;;
  578. *)
  579.     error "Unknown color method '$COLORMODE'"
  580.     ;;
  581. esac
  582.  
  583. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  584.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  585. fi
  586.  
  587. if [ "" != "$COLOR" ]; then
  588.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  589.     # Faster, but can't handle AllIsBlack or BlackClears
  590.     GSDEV=-sDEVICE=pksmraw
  591.     else
  592.     # Can't handle different size pages
  593.     GSDEV=-sDEVICE=bitcmyk
  594.     fi
  595. fi
  596.  
  597. #
  598. #    Figure out USERNAME
  599. #
  600. if [ "$LPUSER" != "" ]; then
  601.     USER="$LPUSER@$LPHOST"
  602. else
  603.     USER=""
  604. fi
  605.  
  606. #
  607. #    Main Program, just cobble together the pipeline and run it
  608. #
  609. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  610. #    (some versions?) of Ghostscript where Postscript's stdout gets
  611. #    intermingled with the printer drivers output, resulting in
  612. #    corrupted image data.
  613. #
  614. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  615.  
  616. foo2zjs-pstops $PSTOPS_OPTS | \
  617. $PREFILTER \
  618. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  619.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  620. | foo2xqx -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  621.         $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  622.         -J "$LPJOB" -U "$USER" \
  623.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD -D$DEBUG
  624.  
  625. #
  626. #    Log the command line, for debugging and problem reports
  627. #
  628. if [ -x /usr/bin/logger ]; then
  629.     logger -t "$BASENAME" -p lpr.info -- \
  630.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  631.     logger -t "$BASENAME" -p lpr.info -- \
  632.     "foo2xqx -r$RES -g$DIM -p$PAPER -m$MEDIA \
  633. -n$COPIES -d$DUPLEX -s$SOURCE $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  634. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD"
  635. fi
  636.  
  637. #
  638. #    Remove cruft
  639. #
  640. if [ $DEBUG -eq 0 ]; then
  641.     for i in crd.ps log usecie.ps selcrd.ps
  642.     do
  643.     file="$ICCTMP.$i"
  644.     [ -f $file ] && rm -f $file
  645.     done
  646.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  647. fi
  648.  
  649. exit 0
  650.